import java.util.Random;
import java.util.Scanner;


public class Test {

    //返回二进制中1的个数
    public static void main(String[] args) {
        int n=-1;
        int count=0;
        while(n != 0){
            n=n&(n-1);
            count++;
        }
        System.out.println(count);
    }

    //返回二进制中1的个数
    public static void main21(String[] args) {
        int n=15;
        int count=0;
        for(int i=0;i<32;i++){
            if((n&1)!=0){
                count++;
            }
            n=n>>1;  //右移
        }
        System.out.println(count);
    }


    //水仙花  打印0~200之间的水仙花数
    public static void main20(String[] args) {

        for(int i=0;i<200;i++){
            int count=0;   //几位数
            int sum=0; //和
            int tem=i;
            while(tem!=0){
                tem/=10;
                count++;
            }
            tem=i;
            while(tem!=0){
                sum+=Math.pow(tem%10,count);//
                tem=tem/10;//
            }
           if(sum==i){
               System.out.println(i);
           }
        }

    }

    //求两个正整数的最大公约数
    public static void main19(String[] args) {
        Scanner sc = new Scanner(System.in);
        //int n = sc.nextInt();
        int a=18;
        int b=24;
        int c=a%b;
        while(c!=0){
            a=b;
            b=c;
            c=a%b;
        }
        System.out.println("最大公约数为："+b);
    }

    // 判断闰年
    public static void main18(String[] args) {
        Scanner sc =  new Scanner(System.in);
        int year = sc.nextInt();
        if(year %4 == 0 && year %100 !=0){
            System.out.println("普通闰年");
        }
        else if(year %100 ==0 && year %400 == 0){
            System.out.println("是世纪闰年");
        }
        else
            System.out.println("不是闰年");
    }
    //输出乘法口诀表  右下角形式
    public static void main17(String[] args) {
        int i=0,j=0;
        for(i=1;i<=9;i++){
            for(j=1;j<=9-i;j++){
                    System.out.print("\t\t");
            }
            for(j=1;j<=i;j++){
                    System.out.print(i+"x"+j+"="+i*j+"  ");
            }
            System.out.println();
        }

    }
    //输出乘法口诀表  右上角形式
    public static void main16(String[] args) {
        int i=9,j=9;
        for(i=9;i>0;i--){
            for(j=9;j>0;j--){
                if(j>i){
                    System.out.print("       ");
                }
                else{
                    System.out.print(j+"x"+i+"="+i*j+" ");
                }
            }
            System.out.println();
        }
    }

    //输出乘法口诀表 左上三角形式
    public static void main15(String[]args){
        int i=9,j=9;
        for(i=9;i>=1;i--){
            for(j=1;j<=i;j++){
                System.out.print(j+"x"+i+"="+i*j+" ");
            }
            System.out.println();
        }
    }


    //输出乘法口诀表 左下三角形式
    public static void main14(String[] args) {
        int i=1,j=1;
        for(i=1;i<=9;i++){
            for(j=1;j<=i;j++){
                System.out.print(j+"x"+i+"="+i*j+" ");
            }
            System.out.println();
        }

    }


    //判断素数高级版
    //例子：16 不是素数，可以写成 1x16 2x8 4x4 一定有一个因数<=根号16即4 所以只需要判断2-根号16(包括根号16)之间的数字即可
    public static void main13(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int i = 2;
        while (i <= Math.sqrt(n)) {
            if (n % i == 0) {
                System.out.println(n + "不是素数！");
                break;
            }
            i++;
        }
        if (i > Math.sqrt(n)) {
            System.out.println(n + "是素数！");
        }
    }
    //判断素数升级版
    //例子：16 不是素数，可以写成 1x16 2x8 4x4 必定有一个因数<=n/2 所以只判断2-16/2(包括16/2)的数字内有没有数字可以被整除即可
    public static void main12(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n=sc.nextInt();
        int i=2;
        while(i <= n/2){
            if(n % i == 0){
                System.out.println(n+"不是素数！");
                break;
            }
            i++;
        }
        if(i > n/2){
            System.out.println(n+"是素数！");
        }
    }

    //判断素数  只能被1和它本身能被整除
    public static void main11(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n=sc.nextInt();
        int i=2;
        while(i < n){
            if(n % i == 0){
                System.out.println(n+"不是素数！");
                break;
            }
            i++;
        }
        if(i == n){
            System.out.println(n+"是素数！");
        }
    }

    //猜数字游戏
    public static void main10(String[] args) {
        Scanner sc=new Scanner(System.in);
        Random ra=new Random();
        //int randNum=ra.nextInt(100);   //[0,100)
        int randNum=ra.nextInt(50)+50;   //[50,100)
        while(true){
            int n=sc.nextInt();
            if(n > randNum){
                System.out.println("猜大啦！再小点儿");
                continue;
            }
            else if(n < randNum){
                System.out.println("猜小啦！再大点儿！");
                continue;
            }
            else {
                System.out.println("猜对咯！ 随机数为："+n);
                break;
            }

        }
    }

    //  循环输入   使用 Scanner 循环读取 N 个数字，并求取其平均值
    public static void main9(String[] args) {
        Scanner sc=new Scanner(System.in);
        int sum=0;
        int n=0;
        while(sc.hasNextInt()){    //循环输入，以ctr+D结束输入 只能输入int类型的数据 若输入了其它类型的数据不满足循环条件 会循环终止
            int a=sc.nextInt();
            n++;
            sum+=a;
        }
        System.out.println("共"+n+"个数，其和为："+sum+"其平均值为："+sum/n);
        sc.close();
    }

    //netLine()  改进版本
    public static void main8(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("输入你的年龄：");
        int age=sc.nextInt();
        System.out.println("年龄为："+age);

        sc.nextLine();                    //吸取回车以保证能正确输入参数s姓名

        System.out.println("输入你的姓名：");
        String s=sc.nextLine();
        System.out.println("姓名为："+s);
    }

    //netLine()的应用  错误版本
    public static void main7(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("输入你的年龄：");
        int age=sc.nextInt();
        System.out.println("年龄为："+age);
        System.out.println("输入你的姓名：");
        String s=sc.nextLine();
        System.out.println("姓名为："+s);
        //运行结束后会发现 输入变量年龄后按回车键直接结束了  并没有让你输入姓名
        //这是因为netLine()会吸取回车作为参数，输入完年龄后按的回车键被作为了参数s
    }



    //next()的应用
    public static void main6(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("输入你的年龄：");
        int age = sc.nextInt();           //回车即结束
        System.out.println("年龄为："+age);
        System.out.println("输入你的姓名：");
        String s=sc.next(); //遇到空格或者回车就结束 只读取空格或者回车之前的内容  例：输入zhang san 只会输出zhang
        System.out.println("姓名为："+s); //
    }

    //以各种进制形式输入
    public static void main5(String[] args) {
        Scanner scan=new Scanner(System.in);
        int a=scan.nextInt(8);  //以八进制形式输入
        System.out.println(a);  //输出还是十进制
    }

    //计算1-100之间既能被5整除又能被6整除的数字并输出
    public static void main4(String[] args) {
        int i=0;
        while(i<=100){
            if(i%30 == 0){
            //if((i%5==0) && (i%6==0)){
                System.out.println(i);
                i++;
                continue;
            }
            i++;
        }
    }

    // 计算 1! + 2! + 3! + 4! + 5！即阶乘之和   思路：分两步 1、先计算阶乘  2、再考虑之和

    public static void main3(String[] args) {
        int x=1;
        int sum=0;
        int k=7;
        while(x<=k){  //外循环计算阶乘之和
            int n = 1;
            int ret = 1;
            while(n<=x){  //里循环计算阶乘
                ret*=n;
                n++;
            }
            System.out.println(x+"的阶乘："+ret);
            sum+=ret;
            x++;
        }
        System.out.println("前"+k+"项阶乘之和为："+sum);

    }
    //计算阶乘5！    5x4x3x2x1
    public static void main2(String[] args) {
        int n2=5;
        int ret2=5;
        while(n2-1>0){
            ret2*=n2-1;
            n2--;
        }
        System.out.println(ret2);
    }
    //计算阶乘 5！    1x2x3x4x5
    public static void main1(String[] args) {
        int n1 = 1;
        int ret1 = 1;
        while(n1<=5){
            ret1*=n1;
            n1++;
        }
        System.out.println(ret1);
    }
}
